// --------------------------------------------------
	/**
	 * 录音类（指定content-type为application/x-www-form-urlencoded使用）
	 * @param {*} stream 流对象
	 */
  const HZRecorderForm = function (stream) {

    //创建一个音频环境对象  
    audioContext = window.AudioContext || window.webkitAudioContext;
    var ac = new audioContext();
    var chunks = [];
    var mediaRecorder
    var blobResult
    //开始录音  
    this.start = function () {
      if (!mediaRecorder) {
        var origin = ac.createMediaStreamSource(stream)
        var dest = ac.createMediaStreamDestination();
        mediaRecorder = new MediaRecorder(dest.stream);
        mediaRecorder.ondataavailable = function(e) {
          if (e.data && e.data.size > 0) {
            chunks.push(e.data);
          }
        }
        mediaRecorder.onstop = function(evt) {
          blobResult = new Blob(chunks, { 'type' : 'audio/mpeg' });
        };
        origin.connect(dest);
      }
      mediaRecorder.start();
    };
    // 结束录音
    this.end = function () {
      // 当录音类处于不活跃状态时，停止操作
      if (mediaRecorder.state === 'inactive') return
      mediaRecorder.requestData()
      mediaRecorder.stop();
    };
    // 暂停录音
    this.stop = function() {
      // 当录音类处于不活跃状态时，停止操作
      if (mediaRecorder.state === 'inactive') return
      mediaRecorder.pause()
    }
    // 恢复录音
    this.again = function() {
      // 当录音类处于不活跃状态时，停止操作
      if (mediaRecorder.state === 'inactive') return
      mediaRecorder.resume()
    }
    //上传  
    this.upload = function (url, succ, err) {
      setTimeout(() => {
        var xhr = new XMLHttpRequest();
        xhr.open('POST', url);
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
        xhr.send(blobResult);
        xhr.onload = e => {
          // 请求完成 && 外部状态码200 && 内部状态码1（这个内部状态码自定义）
          if (xhr.readyState === 4 && xhr.status === 200 && JSON.parse(xhr.response).status === 1) {
            succ && succ(xhr.response)
          } else {
            err && err(JSON.parse(xhr.response).message)
          }
        }
      })
    };
  }
  
/**
 * 多浏览器兼容
 * @param {*} videoConfig 参数配置
 * @param {*} succ 成功回调
 * @param {*} fail 失败回调
 * @returns promise
 */
HZRecorderForm.compatibleMedia = async function(videoConfig) {
	let streamPromise // 视频promise
	if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia){
		// 最新标准API
		streamPromise = await navigator.mediaDevices.getUserMedia(videoConfig)
	} else if (navigator.webkitGetUserMedia){
		// webkit内核浏览器
		streamPromise = await navigator.webkitGetUserMedia(videoConfig)
	} else if (navigator.mozGetUserMedia){
		// Firefox浏览器
		streamPromise = await navagator.mozGetUserMedia(videoConfig)
	} else if (navigator.getUserMedia){
		// 旧版API
		streamPromise = await navigator.getUserMedia(videoConfig)
	}
	return streamPromise
}
/**
 * 是否支持录音
 * @returns 支持直接返回录音类实例 : 返回false
 */
HZRecorderForm.ready = async function() {
	let instance // 录音类实例（ready ok） | false （ready no）
	await HZRecorderForm.compatibleMedia({ audio: true }).then(stream => {
		instance = new HZRecorderForm(stream);
	}).catch(() => {
		instance = false
	})
	return instance
}